import tkinter as tk

# 数据越多越好
data = {
    '望': {'面色': ['苍白', '红润', '发紫', '黄褐', '黄白', '水肿'], '舌苔': ['淡白', '红绛']},
    '闻': {'气味': ['口臭', '体味'], '声音': ['心脏杂音', '声音浑浊', '呼吸困难']},
    '问': {'病历': ['高血压', '高血脂', '高血糖'], '感受': ['气短', '胸痛', '乏力', '犯困', '头晕', '腹胀']},
    '切': {'脉搏': ['弦细', '沉迟', '滑数']},
}

# 病症数组
tabs = []
# 心脏病症状
tabs.append({'面色': ['苍白', '发紫'], '舌苔': [], '气味': [], '声音': ['心脏杂音', '呼吸困难'], '病历': ['高血压'], '感受': ['乏力', '头晕'], '脉搏': ['弦细', '沉迟']})
# 糖尿病症状
tabs.append({'面色': ['黄褐', '红润'], '舌苔': ['淡白'], '气味': ['口臭', '体味'], '声音': [], '病历': ['高血糖'], '感受': ['乏力', '犯困'], '脉搏': ['弦细', '滑数']})
# 消化不良症状
tabs.append({'面色': ['黄白'], '舌苔': ['淡白'], '气味': ['口臭', '体味'], '声音': [], '病历': [], '感受': ['腹胀'], '脉搏': ['弦细', '滑数']})

# 创建主窗口
root = tk.Tk()
root.title("中医诊断机器人")

# 标签
label = tk.Label(root, text="中医诊断机器人", font=("Arial", 16))
label.pack(pady=5)

# 诊断结果文本框
result_text = tk.Text(root, width=50, height=3)
result_text.pack(pady=5)

# 渲染表格，一共有七个下拉列表
# 望
frame = tk.Frame(root)
frame.pack()
label = tk.Label(frame, text="望")
label.pack(side=tk.LEFT)
# 面色
var_ms = tk.StringVar(root)
var_ms.set("面色")
tk.OptionMenu(frame, var_ms, *data["望"]["面色"]).pack(side=tk.LEFT)
# 舌苔
var_st = tk.StringVar(root)
var_st.set("舌苔")
tk.OptionMenu(frame, var_st, *data["望"]["舌苔"]).pack(side=tk.LEFT)
# 闻
frame = tk.Frame(root)
frame.pack()
label = tk.Label(frame, text="闻")
label.pack(side=tk.LEFT)
# 气味
var_qw = tk.StringVar(root)
var_qw.set("气味")
tk.OptionMenu(frame, var_qw, *data["闻"]["气味"]).pack(side=tk.LEFT)
# 声音
var_sy = tk.StringVar(root)
var_sy.set("声音")
tk.OptionMenu(frame, var_sy, *data["闻"]["声音"]).pack(side=tk.LEFT)
# 问
frame = tk.Frame(root)
frame.pack()
label = tk.Label(frame, text="问")
label.pack(side=tk.LEFT)
# 病历
var_bl = tk.StringVar(root)
var_bl.set("病历")
tk.OptionMenu(frame, var_bl, *data["问"]["病历"]).pack(side=tk.LEFT)
# 感受
var_gs = tk.StringVar(root)
var_gs.set("感受")
tk.OptionMenu(frame, var_gs, *data["问"]["感受"]).pack(side=tk.LEFT)
# 切
frame = tk.Frame(root)
frame.pack()
label = tk.Label(frame, text="切")
label.pack(side=tk.LEFT)
# 脉搏
var_mb = tk.StringVar(root)
var_mb.set("脉搏")
tk.OptionMenu(frame, var_mb, *data["切"]["脉搏"]).pack(side=tk.LEFT)


# 开始诊断按钮，核心代码
def send():
    global select
    # 病症检测数组，初始值为0
    arr = [0, 0, 0]
    for t in range(len(tabs)):
        tab = tabs[t]
        # 符合面色
        if var_ms.get() in tab["面色"]:
            arr[t] += 1
        # 符合舌苔
        if var_st.get() in tab["舌苔"]:
            arr[t] += 1
        # 符合气味
        if var_qw.get() in tab["气味"]:
            arr[t] += 1
        # 符合声音
        if var_sy.get() in tab["声音"]:
            arr[t] += 1
        # 符合病历
        if var_bl.get() in tab["病历"]:
            arr[t] += 1
        # 符合感受
        if var_gs.get() in tab["感受"]:
            arr[t] += 1
        # 符合脉搏
        if var_mb.get() in tab["脉搏"]:
            arr[t] += 1
            
    # 一个七个诊断项目
    ls = 7
    # 显示诊断报告（四舍五入后的百分比）
    string = '您患有心脏病的概率是：' + str(round(arr[0] * 100 / ls)) + '%'
    string += '\n您患有糖尿病的概率是：' + str(round(arr[1] * 100 / ls)) + '%'
    string += '\n您患有消化不良的概率是：' + str(round(arr[2] * 100 / ls)) + '%'
    result_text.delete(1.0, tk.END)
    result_text.insert(tk.END, string)

button = tk.Button(root, text="诊断", command=send)
button.pack(pady=10)

# 运行主循环
root.mainloop()